/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dpoo.control;

import dpoo.gui.VentanaPrincipal;
import dpoo.figuras.*;
import java.util.Vector;
import java.awt.event.MouseEvent;

/**
 *
 * @author david
 */
public class Control {
    private static Control control;
    protected Vector<FiguraClase> vectorClases = new Vector<FiguraClase>();
    protected Vector<FiguraHerencia> vectorHerencia = new Vector<FiguraHerencia>();

    private Comportamiento comportamiento;
    private FiguraClase origenHerencia;
    private VentanaPrincipal ventanaPrincipal;
    
    //falso constructor
    private Control() {}
    
    //el acceso al objeto se hará siempre a través de este método: SINGLETON
    public static Control instancia() {
        if (control == null) {
                control = new Control();
        }  
        
        return control;
    }
    
    
    //CAMBIAR EL COMPORTAMIENTO
    public void cambiarComportamientoSeleccionar() {
        this.comportamiento = new ComportamientoSeleccionar();
    }
    
    public void cambiarComportamientoClase() {
        this.comportamiento = new ComportamientoClase();
    }
    
    public void cambiarComportamientoHerencia() {
        this.comportamiento = new ComportamientoHerencia();
    }
    
    
    public void setVentanaPrincipal(VentanaPrincipal foo) {
        this.ventanaPrincipal = foo;
    }
    
    
    //CREAR CLASES
    public void crearClase(java.awt.event.MouseEvent evt) {
        FiguraClase clase = new FiguraClase(evt.getX(), evt.getY());
        this.vectorClases.add(clase);
        
        this.ventanaPrincipal.anadirJComponent(clase);
    }
        
    //CREAR RELACIÓN DE HERENCIA
    public void crearHerencia(FiguraClase foo) {
        if (this.origenHerencia == null) {  //es el origen de la herencia
            this.origenHerencia = foo;
        } else {    //es el destino de la herencia
            FiguraHerencia herencia = new FiguraHerencia(this.origenHerencia, foo);
            this.vectorHerencia.add(herencia);
            
            this.origenHerencia = null;
            this.ventanaPrincipal.anadirJComponent(herencia);
        }
    }
    
    
    //PROXY
    public void claseMouseClicked(FiguraClase clase) {
        
        if(this.comportamiento == null)
            this.cambiarComportamientoSeleccionar();
        
        this.comportamiento.claseMouseClicked(clase);
    }
    
    public void ventanaPrincipalMouseClicked(MouseEvent evt) {
        
        if(this.comportamiento == null)
            this.cambiarComportamientoSeleccionar();
        
        this.comportamiento.ventanaPrincipalMouseClicked(evt);
    }
    
    public void ventanaPrincipalMouseDragged(MouseEvent evt) {
        
        if(this.comportamiento == null)
            this.cambiarComportamientoSeleccionar();
        
        this.comportamiento.ventanaPrincipalMouseDragged(evt);
    }
}
